package com.gantang.gax.engine.nativelib.service;

import com.gantang.gax.engine.model.EngineCreator;
import com.gantang.gax.engine.model.EngineResult;
import org.springframework.stereotype.Service;

/**
 * cxd引擎创建服务
 *
 * @author gantang
 */
@Service("cxdEngineCreatorNativeService")
public class CxdEngineCreatorNativeService {
    /**
     * 校验引擎创建参数
     *
     * @param engineCreator 引擎构建对象
     * @return 校验返回结果
     */
    public native EngineResult<Boolean> valid(EngineCreator engineCreator);

    /**
     * 同步方式创建引擎
     * folderPath 是文件夹路径，规则如下：
     * <ul>
     *   <li>folderPath为空，则取系统参数 GANT_CXD_FOLDER_PATH</li>
     *   <li>folderPath传递 /home/gantang 文件夹不存在则需要创建，如果有则直接使用</li>
     *   <li>folderPath传递 /home/gantang，engineCreator.getEngineId()如果是001，则目录结构为 /home/gantang/001</li>
     * </ul>
     *
     * @param folderPath    文件夹路径 可以为空
     * @param engineCreator 引擎构建对象
     * @return 创建返回结果
     */
    public native EngineResult<Boolean> create(EngineCreator engineCreator, String folderPath);

    /**
     * 异步方式创建引擎
     *
     * @param engineCreator 引擎构建对象
     * @return 异步创建返回结果
     */
    public native EngineResult<Boolean> asyncCreate(EngineCreator engineCreator);

    /**
     * 异步方式回调
     *
     * @param engineId 引擎ID
     * @return 异步创建回调结果
     */
    public native EngineResult asyncCreateCallback(String engineId);
}